package integracion;

import java.util.Date;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.EJB;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import com.thoughtworks.xstream.XStream;

import ejbs.Facade;
import ejbs.FacadeBean;
import entities.Factura;
import entities.ItemAComprar;
import entities.ItemFacturado;

import xmlEntities.FacturaXML;
import xmlEntities.ItemFacturaXML;
import xmlEntities.ItemXML;


@MessageDriven(
		activationConfig = { 
				@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
				@ActivationConfigProperty(propertyName="destination", propertyValue="queue/recibirFacturaQueue")}, 
		mappedName = "recibirFacturaQueue")
public class RecibirFacturaMDB implements MessageListener 
{
	@EJB
	private Facade facade;
	
	@PersistenceContext(unitName="TALLER")
	private EntityManager em;
	
    public void onMessage(Message message) 
    {
    	try 
    	{    		
    		Factura factura = new Factura();
    		
			String facturaOficinaVentas = ((TextMessage)message).getText();
			
			factura = ConvertirAFacturaXML(facturaOficinaVentas);
			System.out.println("========== Recibiendo FACTURA ===========");
			System.out.println(facturaOficinaVentas);			
			facade.recibirFactura(factura);			
			
		} 
    	catch (JMSException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}        
        
    }

	private Factura ConvertirAFacturaXML(String facturaOficinaVentas) 
	{
		XStream xstream  = new XStream();
		Factura factura = new Factura();
		
		xstream.alias("Factura", FacturaXML.class);
		xstream.alias("Item", ItemFacturaXML.class);
		
		FacturaXML facturaXML = (FacturaXML)xstream.fromXML(facturaOficinaVentas);		
				
		Date fecha = convertirStringFechaADate(facturaXML.getFechaEmision());		
		factura.setFecha(fecha);
		
		for(int i = 0; i < facturaXML.getItems().size(); i++)
		{
			ItemFacturado itemFacturado = new ItemFacturado();
			ItemFacturaXML itemFacturaXML = facturaXML.getItems().get(i);
			
			itemFacturado.setCantidad(itemFacturaXML.getCantidad());
			itemFacturado.setCodigo(itemFacturaXML.getCodigo());			
			itemFacturado.setPrecio(Double.parseDouble(String.valueOf(itemFacturaXML.getPrecio())));
			itemFacturado.setFactura(factura);
			
			factura.getItemsFacturados().add(itemFacturado);			
		}
		
		System.out.println("========Imprimiendo Factura===========");
		
		System.out.println(factura.getFecha().toString());	
		 
		
		return factura;
	}
	
	private Date convertirStringFechaADate(String fechaEmision) 
	{
		Date fecha = new Date();
		
		int anio = Integer.valueOf(fechaEmision.substring(0, 4));
		int mes = Integer.valueOf(fechaEmision.substring(4, 6));
		int dia = Integer.valueOf(fechaEmision.substring(6,8));
		
		fecha.setYear(anio-1900);
		fecha.setMonth(mes -1);
		fecha.setDate(dia);
		
		
		
		return fecha;
	}




	

}
